跳到主要内容

命令行GUI开发 - FTXUI

阅读量

0

阅读人次

0

FTXUI 是一个用于基于终端的用户界面的简单跨平台 C++ 库!它受 React 启发,采用函数式编程。

FTXUI 主要由三个模块组成,Screen、Dom、Component。

  • Screen 抽象出了一个虚拟的 显示器 对象,使得我能能够在上面进行界面绘制,最终呈现在终端上。
  • Dom 代表 UI 元素,该模块定义了一组具有层次的 ftxui::ElementElement能够对布局进行管理,并且能够根据终端的二维大小进行响应式变化,它用于绘制在 Screen 上。
  • Component 代表用于接收用户输入,以及进行动态响应的组件。

ftxui::Element 用于选择一个单独的帧画面,ftxui::Component 被用于渲染动态用户界面,它会产生多个帧,并且会根据事件的变化而更新其状态,从而产生不同的帧(例如按钮的按下和释放)。

使用

include(FetchContent)

FetchContent_Declare(FTXUI
GIT_REPOSITORY https://amass.fun/gitea/amass/FTXUI.git
GIT_TAG v5.0.0
)
FetchContent_MakeAvailable(FTXUI)

add_executable(FtxTest
main.cpp
)

target_link_libraries(FtxTest
PRIVATE ftxui::screen
PRIVATE ftxui::dom
PRIVATE ftxui::component
)
#include <ftxui/dom/elements.hpp> 
#include <ftxui/screen/screen.hpp>
#include <stdio.h>

int main() {
using namespace ftxui;
auto document = vbox({
hbox({
text("one") | border,
text("two") | border | flex,
text("three") | border | flex,
}),

gauge(0.25) | color(Color::Red),
gauge(0.50) | color(Color::White),
gauge(0.75) | color(Color::Blue),
});
auto screen = Screen::Create(Dimension::Full(),Dimension::Fit(document));
Render(screen, document);
screen.Print();
getchar();

return 0;
}